package ca.csf.dfc.poo.environnement;

import java.util.Random;

import ca.csf.dfc.poo.exceptions.IllegalPositionXException;
import ca.csf.dfc.poo.exceptions.IllegalPositionYException;
import ca.csf.dfc.poo.exceptions.IllegalRecompenseException;
import ca.csf.dfc.poo.exceptions.IllegalTableauDecisionException;


public class RobotAleatoire extends Robot
{
	/**
	 * Constructeur d'initialisation qui prend les deux paramètres de position donnée par l'engin 
	 * @param p_X La poistion Horizontal sur la grille.
	 * @param p_Y La position vertical sur la grille.
	 * @throws IllegalRecompenseException 
	 * @throws IllegalPositionYException 
	 * @throws IllegalPositionXException 
	 */
	public RobotAleatoire(int p_X, int p_Y) throws IllegalPositionXException, IllegalPositionYException, IllegalRecompenseException
	{
		super(p_X,p_Y);
	}

	/**
	 * La méthode choisit un nombre entre 0 et 3. Chaque numéro correspond à une direction : 0-> haut 1->droite
	 * 2->bas 3->gauche. Ensuite le robot est déplacé par la méthode bouger() de la class mère Robot.
	 * @throws IllegalTableauDecisionException 
	 * @return La décision choisie.
	 * @see ca.csf.dfc.poo.environnement.Robot#prendreDecision(ca.csf.dfc.poo.environnement.Case, ca.csf.dfc.poo.environnement.Case, ca.csf.dfc.poo.environnement.Case, ca.csf.dfc.poo.environnement.Case)
	 */
	@Override
	public int prendreDecision(Case[] p_TabCases) throws IllegalTableauDecisionException
	{
	    //On regarde si le tableau ne contient pas 4 cases.
	    if (p_TabCases.length != 4)
	        throw new IllegalTableauDecisionException();
	    
		Random choix;
		int direction = AUCUNE;
		
		boolean toutesNulles = true;
		        
	    for(int i = 0;i<4;i++)
	    {
	        if (p_TabCases[i] != null)
	        {
	            toutesNulles = false;
	            break;
	        }
	    }
		
	    //On entre dans la boucle seulement si on a au moins une direction valide
	    if (!toutesNulles)
	    {
	        boolean boucle = true;
			//La boucle choisit un chiffre au hasard en 0 et 3 inclu et ensuite vérifie que cette case est valide.
			//Si oui la bloucle se termine avec la valeur de choix qui était valide.
			do
			{
				choix = new Random() ;
				direction = choix.nextInt(p_TabCases.length);
				
				if(p_TabCases[direction]!= null)
				{
					boucle =false;
				}
				
			}while(boucle);
	    }
			return direction;
	}
}
